\documentclass[convert]{standalone}
 
\usepackage{tumcolors}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}
\pgfplotsset{grid style={dotted}}
\usetikzlibrary{plotmarks}
\usetikzlibrary{backgrounds} 

\usepackage{sansmath} 
\sansmath
\renewcommand{\familydefault}{\sfdefault}

\begin{document}
\begin{tikzpicture}[background rectangle/.style={fill=white},show background rectangle]
\begin{axis}[
	title={Bidirectional forwarding performance at 1.6\,GHz},
	title style={yshift=4.5ex},
	width=10.2cm,
	height=6.4cm,
	xmode=log,
	log basis x={2},
	log ticks with fixed point,
	xmin=0.75, xmax=384,
	ymin=0, ymax=30,
	grid=major,
	xtick={1, 2, 4, 8, 16, 32, 64, 128, 256},
	ytick={0,10, 20, 30},
	ylabel=Packet rate {[}Mpps{]},
	xlabel={Batch size},
	legend style={font=\fontsize{7}{8}\selectfont},
	every axis legend/.append style={nodes={right}},
	legend entries={C, Rust, Go, C\#, Java, OCaml, Haskell, Swift, JavaScript, Python},
	legend columns=5,
	legend style={at={(0.5,1.02)}, anchor = south},
]
	\addplot [mark=none,color=TUMBlack, thick] coordinates { % C
		(1,   4.1)
		(2,   7.6)
		(4,   11.3)
		(8,   14.8)
		(16,  15.6)
		(32,  16.3)
		(64,  17.2)
		(128, 17.3)
		(256, 17.5)
	};
	\addplot [mark=x,color=TUMDarkerBlue, thick] coordinates { % Rust
		(1,   3.6)
		(2,   6.5)
		(4,   10.0)
		(8,   13.2)
		(16,  14.7)
		(32,  16.0)
		(64,  16.7)
		(128, 17.2)
		(256, 17.2)
	};
	\addplot [mark=triangle*,color=TUMGreen, thick] coordinates { % Go
		(1,   1.7)
		(2,   3.1)
		(4,   5.4)
		(8,   8.1)
		(16,  10.3)
		(32,  12.2)
		(64,  13.2)
		(128, 13.3)
		(256, 13.4)
	};
	\addplot [mark=+,color=TUMOrange, thick] coordinates { % C#
		(1,   1.4)
		(2,   2.6)
		(4,   5.0)
		(8,   7.6)
		(16,  10.4)
		(32,  12.4)
		(64,  14.3)
		(128, 15.0)
		(256, 15.6)
	};
	\addplot [mark=diamond*,color=TUMLightBlue, thick] coordinates { % java
		(1,   2.40)
		(2,   3.48)
		(4,   4.99)
		(8,   5.70)
		(16,  5.98)
		(32,  6.24)
		(64,  6.42)
		(128, 6.39)
		(256, 6.39)
	};
	\addplot [mark=*,color=TUMYellow, thick] coordinates { % OCaml
		(2,   1.43 * 2)
		(4,   2.17 * 2)
		(8,   2.71 * 2)
		(16,  2.91 * 2)
		(32,  3.07 * 2)
		(64,  3.36 * 2)
		(128, 3.26 * 2)
		(256, 3.10 * 2)
	};
	\addplot [mark=square*,color=TUMRed, thick] coordinates { % Haskell
		(1,   0.987263 * 2)
		(2,   1.40531  * 2)
		(4,   1.83364  * 2)
		(8,   2.15936  * 2)
		(16,  2.3468   * 2)
		(32,  2.44134  * 2)
		(64,  2.52666  * 2)
		(128, 2.52471  * 2)
		(256, 2.48338  * 2)
	};
	\addplot [mark=triangle,color=TUMPurple, thick] coordinates { % Swift
		(1,   0.91)
		(2,   1.39)
		(4,   1.93)
		(8,   2.24)
		(16,  2.49)
		(32,  2.67)
		(64,  2.74)
		(128, 2.78)
		(256, 2.79)
	};
	\addplot [mark=o,color=TUMDarkerGreen] coordinates { % JavaScript
		(1,   0.605 * 2)
		(2,   0.826 * 2)
		(4,   1.013 * 2)
		(8,   1.102 * 2)
		(16,  1.209 * 2)
		(32,  1.267 * 2)
		(64,  1.208 * 2)
		(128, 1.253 * 2)
		(256, 1.269 * 2)
	};
	\addplot [mark=square,color=TUMIvony!50!black!70, thick] coordinates { % Python
		(1,   0.02 * 2)
		(2,   0.02 * 2)
		(4,   0.02 * 2)
		(8,   0.02 * 2)
		(16,  0.03 * 2)
		(32,  0.04 * 2)
		(64,  0.04 * 2)
		(128, 0.04 * 2)
		(256, 0.05 * 2)
	};
\end{axis}
\end{tikzpicture}
\end{document}
